"""
设有n=2k个选手要进行网球循环赛，要求设计一个满足以下要求的比赛日程表：
（1）每个选手必须与其他n-1个选手各赛一次；
（2）每个选手一天只能赛一次。
"""
import numpy as np


def get_table(k):
    # x从1开始，即比赛人数从2人开始
    for x in range(1, k + 1):
        # L为比赛人数的一半，即矩阵边长的1/2
        L = 2 ** (x - 1)

        # 右上角根据左上角的数据加上边长L
        for i in range(L):
            for j in range(L):
                table[i, j + L] = table[i, j] + L

        # 右下角复制到左上角
        for i in range(L):
            for j in range(L):
                table[L + i, L + j] = table[i, j]

        # 右上角复制到左下角
        for i in range(L):
            for j in range(L):
                table[L + i, j] = table[i, L + j]


k = int(input("k为："))
# 比赛人数为n
n = 2 ** k

# 根据比赛人数初始化为n*n的二维数组
table = np.array([0] * n ** 2).reshape(n, n)
table[0, 0] = 1

get_table(k)

print(table)
